#include "IQHello.h"
#include "macros.h"
#include <stdlib.h>
#include <string.h>

// =============== 定义接口实现 ================
// C语言的实际实现结构体
typedef struct {
    char* message;
} IQHelloImpl;  

// =============== 定义接口对象 ================
// 获取接口实现类型
IQImplType impl_t() {
    return IQ_IMPL_C;  // C 的类型将触发 IQHelloWrapper 包装器
}

// 创建IQHello实例
DECLARE_CREATE_FUNC(IQHello) {
    // 分配实现对象
    IQHelloImpl* impl = (IQHelloImpl*)malloc(sizeof(IQHelloImpl));
    if (!impl) return NULL;

    // 分配接口对象
    impl->message = "Hello, World!(C)";
    return (IQHello*)impl;  // 强制转换为不透明指针;
}

// 销毁IQHello实例
DECLARE_DELETE_FUNC(IQHello) {
    if (ptr) {
        free(ptr);
    }
}

// 获取问候语
char* getHello(IQHello* p) {
    if (!p) return NULL;

    IQHelloImpl* impl = (IQHelloImpl*)p;
    return impl->message;
}